package cfg

import (
	"fmt"
	"gopkg.in/yaml.v3"
	"io/ioutil"
)

var (
	Conf *Config
)

type Data struct {
	MySql Mysql `mapstructure:"mysql" json:"mysql" yaml:"mysql"` // mysql
}

type Mysql struct {
	Host     string `mapstructure:"host" json:"host" yaml:"host"`             // 服务器地址
	Port     string `mapstructure:"port" json:"port" yaml:"port"`             // 端口
	Dbname   string `mapstructure:"db-name" json:"database" yaml:"database"`  // 数据库名
	Username string `mapstructure:"username" json:"username" yaml:"username"` // 数据库用户名
	Password string `mapstructure:"password" json:"password" yaml:"password"` // 数据库密码
}

type Cache struct {
	Redis Redis `mapstructure:"redis" json:"redis" yaml:"redis"` // redis
}

type Redis struct {
	Host string `mapstructure:"host" json:"host" yaml:"host"` // 服务器地址
	Port string `mapstructure:"port" json:"port" yaml:"port"` // 端口
}

func (m *Mysql) Dsn() string {
	return m.Username + ":" + m.Password + "@tcp(" + m.Host + ":" + m.Port + ")/" + m.Dbname + "?charset=utf8mb4&parseTime=true"
}

type Server struct {
	Http Http `mapstructure:"http" json:"http" yaml:"http"` // 服务器地址
}

type Http struct {
	Addr string `mapstructure:"addr" json:"addr" yaml:"addr"` // 服务器地址
}

type Config struct {
	Server Server `mapstructure:"server" json:"server" yaml:"server"` // 服务配置
	Data   Data   `mapstructure:"data" json:"data" yaml:"data"`       // 数据库
	Cache  Cache  `mapstructure:"cache" json:"cache" yaml:"cache"`    // 缓存
}

//var SiteConfig string = "E:/wwwroot/go/go-graduation/service/config/config.yaml"
var SiteConfig string = "/Users/itxiaoq/apps/go-graduation/service/config/config.yaml"

// ReadConfig 获取配置文件
func ReadConfig() (*Config, error) {
	//path := "service/config/config.yaml"
	yamlFile, err := ioutil.ReadFile(SiteConfig)
	if err != nil {
		return Conf, fmt.Errorf("获取配置文件错误 = %s", err.Error())
	}

	err = yaml.Unmarshal(yamlFile, &Conf)
	if err != nil {
		return Conf, fmt.Errorf("解析文件错误 = %s", err.Error())
	}
	return Conf, nil
}
